package com.zoe.app.entity;

import com.zoe.app.validate.ValidateGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;

/**
 * @author zoe.Zhang
 * @date 2022/06/20
 * @description
 */
@Data
public class User {
    /**
     * Validated：中的Value包含Update的时候才会校验
     */
    @NotNull(message = "id不可以为空", groups = {ValidateGroup.Update.class})
    private Long id;

    /**
     * Validated：中的Value包含Insert的时候才会校验
     */
    @NotNull(message = "userName不可以为空", groups = {ValidateGroup.Insert.class})
    @Size(min = 6, max = 12, message = "用户名最小长度6,最大长度12", groups = {ValidateGroup.Insert.class})
    private String userName;

    /**
     * Validated：value如果没有值，那么默认会校验没有写groups的分组，如果Value有class，比如是Insert.class
     * 加上没有写groups的分组，那么需要在加上Default.class
     */
    @Range(min = 1L, max = 100, message = "age最小1,最大100")
    private Integer age;

    @Digits(integer = 2, fraction = 0, message = "最大整数位2")
    private Long count;

    @Max(value = 100, message = "最大身高100")
    @Min(value = 50, message = "最低身高50")
    private String height;

    @Pattern(regexp = "^[\\d\\*]{7,12}$", message = "联系电话有问题")
    private String phone;

    // 最大整数位 长度2位，最大小数位长度 3
    @Digits(integer = 2, fraction = 3, message = "请输入合法工资")
    @Range(min = 1L, max = 99, message = "最低工资1,最高工资99")
    private String salary;

    // 最大整数位 长度2位，最大小数位长度 3
    @Digits(integer = 2, fraction = 3, message = "请输入合法年薪")
    private Double yearSalary;

    @Valid
    private List<Car> cars;

}
